﻿//using System;
//using EasyComm.Hosting.Administration;
//using EasyComm.Specialized;

//namespace EasyComm.SDK.Internal
//{
//    internal static class SLB
//    {
//        private static AdminServiceUnitCollection _adminServiceList = new AdminServiceUnitCollection();
//        private static SystemServiceUnitCollection _systemServiceList = new SystemServiceUnitCollection();

//        private static AdminSLBProxy _adminInstance;
//        internal static AdminSLBProxy AdminInstance
//        {
//            get
//            {
//                if (_adminInstance == null)
//                {
//                    _adminInstance = ServiceContext.GetAdminService();
//                    if (_adminInstance != null)
//                    {
//                        _adminServiceList = _adminInstance.Proxy.GetService();
//                    }
//                    if (_adminInstance == null)
//                    {
//                        throw new ApplicationException("NLB Admin was not found.");
//                    }
//                }
//                return _adminInstance;
//            }
//        }

//        public static ServiceUnit ProxyService
//        {
//            get
//            {
//                if (AdminInstance == null)
//                {
//                    return new ServiceUnit(null) { Type = ServiceType.NLBProxy, Status = ServiceStatus.NA };
//                }
//                ServiceUnit unit = _adminServiceList.Where(item => item.Type == ServiceType.NLBProxy).FirstOrDefault();
//                if (unit == null)
//                {
//                    unit = AdminInstance.Proxy.GetService(ServiceType.NLBProxy);
//                    if (unit != null)
//                    {
//                        _adminServiceList.Add(unit);
//                    }
//                }
//                return unit;
//            }
//        }

//        public static ServiceContractCollection Contracts
//        {
//            get { return RouterService.Contracts; }
//        }

//        //internal static IDictionary<Uri, ServiceType> GetServices()
//        //{
//        //    Dictionary<Uri, ServiceType> serviceList = new Dictionary<Uri, ServiceType>();
//        //    DiscoveryClient discoveryClient = null;
//        //    try
//        //    {
//        //        var binding = new NetTcpBinding(SecurityMode.None);
//        //        DiscoveryEndpoint discoveryEndpoint = new DiscoveryEndpoint(binding, new EndpointAddress(NetUtils.GetAvailableLocalEndPoint("NLBDiscovery", "", ProtocolScheme.Tcp)));
//        //        discoveryClient = new DiscoveryClient(new UdpDiscoveryEndpoint());

//        //        FindCriteria proxyCriteria = new FindCriteria();
//        //        if (ServiceConfiguration.OnlineCheckTimeout > 0)
//        //        {
//        //            proxyCriteria.Duration = new TimeSpan(0, 0, ServiceConfiguration.OnlineCheckTimeout);
//        //        }
//        //        var results = discoveryClient.Find(proxyCriteria);

//        //        foreach (EndpointDiscoveryMetadata endpoint in results.Endpoints)
//        //        {
//        //            if (endpoint.ContractTypeNames.Count(item => item.Name == "DiscoveryProxy") > 0)
//        //            {
//        //                serviceList.Add(endpoint.Address.Uri, ServiceType.Proxy);
//        //            }
//        //            if (endpoint.ContractTypeNames.Count(item => item.Name == "ISimplexDatagramRouter") > 0)
//        //            {
//        //                serviceList.Add(endpoint.Address.Uri, ServiceType.Router);
//        //            }
//        //            //if (endpoint.ContractTypeNames.Count(item => item.Name == "IAdminContract") > 0)
//        //            //{
//        //            //    serviceList.Add(endpoint.Address.Uri, ServiceType.Admin);
//        //            //}
//        //        }
//        //    }
//        //    finally
//        //    {
//        //        if (discoveryClient != null)
//        //        {
//        //            discoveryClient.Close();
//        //        }
//        //    }
//        //    return serviceList;
//        //}
//    }
//}
